package jdepend.framework.ui.graph.creater; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.util.ArrayList; import java.util.List; import jdepend.framework.ui.graph.model.GraphDataItem; import jdepend.framework.ui.graph.model.RegionColor; import org.jfree.chart.ChartColor; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.labels.CustomXYToolTipGenerator; import org.jfree.chart.labels.StandardXYItemLabelGenerator; import org.jfree.chart.labels.XYToolTipGenerator; import org.jfree.chart.plot.IntervalMarker; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.Layer; import org.jfree.ui.RectangleAnchor; import org.jfree.ui.TextAnchor; public final class SplineChartCreater extends AbstractChartCreater { @Override public JFreeChart create(GraphDataItem item) { return this.createChart(item); } @Override public String getType() { return GraphDataItem.SPLINE; } private JFreeChart createChart(final GraphDataItem item) { JFreeChart jfreechart = ChartFactory.createXYLineChart(item.getTitle(), item.getLineXName(), item.getLineYName(), this.createData(item), PlotOrientation.VERTICAL, true, true, true); Font font = new Font("宋体", Font.PLAIN, 13); jfreechart.getTitle().setFont(font); jfreechart.getLegend().setItemFont(font); jfreechart.getXYPlot().getDomainAxis().setTickLabelFont(font); jfreechart.getXYPlot().getDomainAxis().setLabelFont(font); jfreechart.getXYPlot().getRangeAxis().setTickLabelFont(font); jfreechart.getXYPlot().getRangeAxis().setLabelFont(font); jfreechart.getXYPlot().setBackgroundPaint(ChartColor.WHITE); XYPlot xyplot = (XYPlot) jfreechart.getPlot(); xyplot.setDomainPannable(true); xyplot.setRangePannable(true); if (item.getBgColordData() != null) { for (RegionColor region : item.getBgColordData().getData()) { IntervalMarker intervalmarker = new IntervalMarker(region.begin, region.end); intervalmarker.setLabel(region.title); intervalmarker.setLabelFont(new Font("宋体", 2, 11)); intervalmarker.setLabelAnchor(RectangleAnchor.RIGHT); intervalmarker.setLabelTextAnchor(TextAnchor.CENTER_RIGHT); intervalmarker.setPaint(region.color); xyplot.addRangeMarker(intervalmarker, Layer.BACKGROUND); } } XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot.getRenderer(); xylineandshaperenderer.setBaseShapesVisible(true); xylineandshaperenderer.setBaseShapesFilled(true); xylineandshaperenderer.setDrawOutlines(true); xylineandshaperenderer.setUseFillPaint(true); xylineandshaperenderer.setBaseFillPaint(Color.white); xylineandshaperenderer.setSeriesStroke(0, new BasicStroke(3F)); xylineandshaperenderer.setSeriesOutlineStroke(0, new BasicStroke(2.0F)); xylineandshaperenderer.setSeriesShape(0, new java.awt.geom.Ellipse2D.Double(-5D, -5D, 10D, 10D)); xylineandshaperenderer.setBaseItemLabelFont(new Font("宋体", 2, 11)); if (item.getFgColorData() != null) { xylineandshaperenderer.setSeriesPaint(0, item.getFgColorData().mainColor); } final List<Object> values = new ArrayList<Object>(); for (Object name : item.getDatas().keySet()) { values.add(name); } XYToolTipGenerator generator = new CustomXYToolTipGenerator() { @Override public String generateToolTip(XYDataset data, int series, int i) { return item.getTip(values.get(i)); } }; xylineandshaperenderer.setBaseToolTipGenerator(generator); xylineandshaperenderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator() { @Override public String generateLabel(XYDataset dataset, int series, int i) { return item.getTip(values.get(i)); } }); xylineandshaperenderer.setBaseItemLabelsVisible(true); return jfreechart; } private XYDataset createData(GraphDataItem item) { XYSeries xyseries = new XYSeries(item.getLineName()); for (Object name : item.getDatas().keySet()) { xyseries.add((Integer) name, (Float) item.getDatas().get(name)); } XYSeriesCollection xyseriescollection = new XYSeriesCollection(xyseries); return xyseriescollection; } }